home *** CD-ROM | disk | FTP | other *** search
/ GFX Sensations 1 / Graphic Sensations - Volume 1.iso / tools / amiga / 3d_tools / irit40s.lha / Irit / irit / dinner.irt < prev    next >
Encoding:
Text File  |  1993-12-30  |  9.1 KB  |  300 lines

  1. #
  2. # A dinner table scene, to demonstrate the surface constructors of the IRIT
  3. # solid modeller. Do not attempt to run this model on an IBM PC...
  4. #
  5. #                    Gershon Elber, June 1991
  6. #
  7. # modification to dinner.ray:
  8. # fov 12
  9. # light 1 1 1 point 10 30 10
  10.  
  11. if ( machine == msdos, resolution = 5, resolution = 10 );
  12.  
  13. #
  14. # First model the floor...
  15. #
  16. v1 = vector( -4.0, -4.0, 0.0 );
  17. v2 = vector(  4.0, -4.0, 0.0 );
  18. v3 = vector(  4.0,  4.0, 0.0 );
  19. v4 = vector( -4.0,  4.0, 0.0 );
  20. floor = poly( list( v1, v2, v3, v4 ), false );
  21. color( floor, white );
  22. attrib( floor, "texture", "marble" );
  23. attrib( floor, "reflect", 0.6 );
  24. attrib( floor, "rgb", "100,0,0" );
  25.  
  26. #
  27. # Model the table:
  28. #
  29.  
  30. cross = ctlpt( E3, 0.0001, 0.0, 1.0 ) +
  31.         ctlpt( E3, 1.0,    0.0, 1.0 ) +
  32.         ctlpt( E3, 1.0,    0.0, 0.95 ) +
  33.     cbspline( 3,
  34.           list( ctlpt( E3, 0.1, 0.0, 0.95 ),
  35.             ctlpt( E3, 0.1, 0.0, 0.9 ),
  36.             ctlpt( E3, 0.1, 0.0, 0.7 ),
  37.             ctlpt( E3, 0.2, 0.0, 0.6 ),
  38.             ctlpt( E3, 0.2, 0.0, 0.2 ),
  39.             ctlpt( E3, 0.4, 0.0, 0.05 ),
  40.             ctlpt( E3, 0.4, 0.0, 0.0 ) ),
  41.           list( KV_OPEN ) ) +
  42.     ctlpt( E3, 0.0001, 0.0, 0.0 );
  43. table = surfrev( cross );
  44. color( table, yellow );
  45. attrib( table, "resolution", 2 );
  46. attrib( table, "texture", "wood" );
  47. attrib( table, "reflect", 0.6 );
  48. attrib( table, "rgb", "244,164,96" );
  49.  
  50. #
  51. # Make the two chairs.
  52. #
  53. base1 = sweepsrf( circle( vector( 0.0, 0.0, 0.0 ), 0.02 ),
  54.           cbspline( 3,
  55.                 list( ctlpt( E3, 0.5,   0.2, 0.5 ),
  56.                   ctlpt( E3, 0.5,   0.2, 0.07 ),
  57.                   ctlpt( E3, 0.5,   0.2, 0.015 ),
  58.                   ctlpt( E3, 0.43,  0.2, 0.015 ),
  59.                   ctlpt( E3, 0.25,  0.2, 0.1 ),
  60.                   ctlpt( E3, 0.07,  0.2, 0.015 ),
  61.                   ctlpt( E3, 0.0,   0.2, 0.015 ),
  62.                   ctlpt( E3, 0.0,   0.2, 0.07 ),
  63.                   ctlpt( E3, 0.0,   0.2, 0.5 ) ),
  64.                 list( KV_OPEN ) ),
  65.           1.0,
  66.           off );
  67. color( base1, white );
  68. attrib( base1, "reflect", 0.9 );
  69. base2 = base1 * trans( vector( 0.0, -0.4, 0.0 ) );
  70.  
  71. swpcrv = cbspline( 3,
  72.            list( ctlpt( E3,  0.6, 0.0, 0.5 ),
  73.              ctlpt( E3,  0.3, 0.0, 0.6 ),
  74.              ctlpt( E3,  0.0, 0.0, 0.5 ),
  75.              ctlpt( E3, -0.1, 0.0, 0.5 ),
  76.              ctlpt( E3, -0.1, 0.0, 0.6 ),
  77.              ctlpt( E3,  0.0, 0.0, 0.9 ),
  78.              ctlpt( E3, -0.1, 0.0, 1.2 ) ),
  79.            list( KV_OPEN ) );
  80. swpcrv = crefine( swpcrv, false, list( 0.01, 0.1, 0.2, 0.3, 4.7, 4.8, 4.9, 4.99 ) );
  81.  
  82. cross = arc( vector(  0.25,  0.05,  0.0 ),
  83.          vector(  0.25,  0.0,   0.0 ),
  84.          vector(  0.3,   0.0,   0.0 ) ) +
  85.     arc( vector(  0.3,   0.0,   0.0 ),
  86.          vector(  0.25,  0.0,   0.0 ),
  87.          vector(  0.25, -0.05,  0.0 ) ) +
  88.     arc( vector( -0.25, -0.05,  0.0 ),
  89.          vector( -0.25,  0.0,   0.0 ),
  90.          vector( -0.3,   0.0,   0.0 ) ) +
  91.     arc( vector( -0.3,   0.0,   0.0 ),
  92.          vector( -0.25,  0.0,   0.0 ),
  93.          vector( -0.25,  0.05,  0.0 ) ) +
  94.     ctlpt( E3, 0.25, 0.05, 0.0 );
  95.  
  96. coverMain = sweepsrf( cross, swpcrv, 1.0, off );
  97. color( coverMain, yellow );
  98. attrib( coverMain, "texture", "wood" );
  99. attrib( coverMain, "rgb", "244,164,96" );
  100.  
  101. c1 = cmesh(coverMain, ROW, 14);
  102. c2 = c1 * trans( vector( -0.018, 0.0, 0.06 ) );
  103. c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
  104.       trans( vector( -0.124, 0.0, 1.26 ) );
  105. coverTop = sFromCrvs( list( c1, c2, c3 ), 3 );
  106. color( coverTop, yellow );
  107. attrib( coverTop, "texture", "wood" );
  108. attrib( coverTop, "rgb", "244,164,96" );
  109.  
  110. c1 = cmesh(coverMain, ROW, 0);
  111. c2 = c1 * trans( vector( 0.06, 0.0, -0.02 ) );
  112. c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
  113.       trans( vector( 0.66, 0.0, 0.48 ) );
  114. coverBot = sFromCrvs( list( c1, c2, c3 ), 3 );
  115. color( coverBot, yellow );
  116. attrib( coverBot, "texture", "wood" );
  117. attrib( coverBot, "rgb", "244,164,96" );
  118.  
  119. cover = list( CoverMain, coverBot, CoverTop );
  120.  
  121. chair = list( cover, base1, base2 );
  122. chair1 = chair * trans( vector( -1.2, 0.0, 0.0 ) );
  123. chair2 = chair1 * rotz( 90 );
  124. chair3 = chair1 * rotz( 180 );
  125. chair4 = chair1 * rotz( 270 );
  126. chairs = list( chair1, chair2, chair3, chair4 );
  127.  
  128. #
  129. # Create some dishes/cups.
  130. #
  131.  
  132. # Four Dishes.
  133. cross = cbspline( 3,
  134.           list( ctlpt( E3, 0.0001, 0.0, 0.003 ),
  135.             ctlpt( E3, 0.1,    0.0, 0.003 ),
  136.             ctlpt( E3, 0.12,   0.0, 0.0 ),
  137.             ctlpt( E3, 0.15,   0.0, 0.03 ),
  138.             ctlpt( E3, 0.15,   0.0, 0.04 ),
  139.             ctlpt( E3, 0.14,   0.0, 0.03 ),
  140.             ctlpt( E3, 0.12,   0.0, 0.013 ),
  141.             ctlpt( E3, 0.1,    0.0, 0.01 ),
  142.             ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
  143.           list( KV_OPEN ) );
  144. dish = surfrev( cross );
  145. color( dish, white );
  146. attrib( dish, "reflect", 0.2 );
  147. dish1 = dish * trans( vector( 0.75, 0.0, 1.0 ) );
  148. dish2 = dish * trans( vector( -0.75, 0.0, 1.0 ) );
  149. dish3 = dish * trans( vector( 0.0, 0.75, 1.0 ) );
  150. dish4 = dish * trans( vector( 0.0, -0.75, 1.0 ) );
  151. dishes = list( dish1, dish2, dish3, dish4 );
  152.  
  153. # Wine glasses.
  154. cross = cbspline( 3,
  155.           list( ctlpt( E3, 0.0001, 0.0, 0.002 ),
  156.               ctlpt( E3, 0.02,   0.0, 0.002 ),
  157.             ctlpt( E3, 0.022,  0.0, 0.0 ),
  158.             ctlpt( E3, 0.022,  0.0, 0.003 ),
  159.             ctlpt( E3, 0.003,  0.0, 0.003 ),
  160.             ctlpt( E3, 0.003,  0.0, 0.007 ),
  161.             ctlpt( E3, 0.004,  0.0, 0.03 ),
  162.             ctlpt( E3, 0.03,   0.0, 0.03 ),
  163.             ctlpt( E3, 0.04,   0.0, 0.04 ),
  164.             ctlpt( E3, 0.03,   0.0, 0.07 ),
  165.             ctlpt( E3, 0.028,  0.0, 0.07 ),
  166.             ctlpt( E3, 0.037,  0.0, 0.042 ),
  167.             ctlpt( E3, 0.031,  0.0, 0.032 ),
  168.             ctlpt( E3, 0.0001, 0.0, 0.032 ) ),
  169.         list( KV_OPEN ) );
  170. wglass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  171. color( wglass, white );
  172. attrib( wglass, "reflect", 0.2 );
  173. attrib( wglass, "transp", 0.95 );
  174. attrib( wglass, "index", 1.4 );
  175. wglass1 = wglass * trans( vector( 0.75, 0.2, 1.0 ) );
  176. wglass2 = wglass * trans( vector( -0.75, -0.2, 1.0 ) );
  177. wglass3 = wglass * trans( vector( -0.2, 0.75, 1.0 ) );
  178. wglass4 = wglass * trans( vector( 0.2, -0.75, 1.0 ) );
  179. wglasses = list( wglass1, wglass2, wglass3, wglass4 );
  180.  
  181. # Regular glasses.
  182. cross = cbspline( 3,
  183.           list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
  184.               ctlpt( E3, 0.02,   0.0, 0.0 ),
  185.             ctlpt( E3, 0.022,  0.0, 0.001 ),
  186.             ctlpt( E3, 0.022,  0.0, 0.003 ),
  187.             ctlpt( E3, 0.03,   0.0, 0.07 ),
  188.             ctlpt( E3, 0.03,   0.0, 0.072 ),
  189.             ctlpt( E3, 0.028,  0.0, 0.072 ),
  190.             ctlpt( E3, 0.028,  0.0, 0.07 ),
  191.             ctlpt( E3, 0.02,   0.0, 0.005 ),
  192.             ctlpt( E3, 0.018,  0.0, 0.005 ),
  193.             ctlpt( E3, 0.0001, 0.0, 0.005 ) ),
  194.           list( KV_OPEN ) );
  195. glass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  196. color( glass, white );
  197. attrib( glass, "reflect", 0.2 );
  198. attrib( glass, "transp", 0.95 );
  199. attrib( glass, "index", 1.4 );
  200. glass1 = glass * trans( vector( 0.75, -0.2, 1.0 ) );
  201. glass2 = glass * trans( vector( -0.75, 0.2, 1.0 ) );
  202. glass3 = glass * trans( vector( 0.2, 0.75, 1.0 ) );
  203. glass4 = glass * trans( vector( -0.2, -0.75, 1.0 ) );
  204. glasses = list( glass1, glass2, glass3, glass4 );
  205.  
  206. # Napkins.
  207. cross = cbspline( 3,
  208.           list( ctlpt( E2, -0.018, 0.001 ),
  209.               ctlpt( E2,  0.018, 0.001 ),
  210.             ctlpt( E2,  0.019, 0.002 ),
  211.             ctlpt( E2,  0.018, 0.004 ),
  212.             ctlpt( E2, -0.018, 0.004 ),
  213.             ctlpt( E2, -0.019, 0.001 ) ),
  214.           list( KV_OPEN ) );
  215. cross = cross + -cross * scale( vector( 1, -1, 1 ) );
  216.  
  217. napkin = extrude( cross * scale( vector( 1.6, 1.6, 1.6 ) ),
  218.           vector( 0.02, 0.03, 0.2 ) );
  219. color( napkin, red );
  220. napkin1 = napkin * trans( vector( 0.75, -0.2, 1.0 ) );
  221. napkin2 = napkin1 * rotz( 90 );
  222. napkin3 = napkin1 * rotz( 180 );
  223. napkin4 = napkin1 * rotz( 270 );
  224. napkins = list( napkin1, napkin2, napkin3, napkin4 );
  225.  
  226. # Big dish.
  227. cross = ctlpt( E3, 0.0001, 0.0, 0.003 ) +
  228.     cbspline( 3,
  229.           list(    ctlpt( E3, 0.15,   0.0, 0.003 ),
  230.             ctlpt( E3, 0.1,    0.0, 0.01 ),
  231.             ctlpt( E3, 0.1,    0.0, 0.035 ),
  232.             ctlpt( E3, 0.2,    0.0, 0.15 ),
  233.             ctlpt( E3, 0.195,  0.0, 0.15 ),
  234.             ctlpt( E3, 0.09,   0.0, 0.03 ),
  235.             ctlpt( E3, 0.04,   0.0, 0.01 ),
  236.             ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
  237.           list( KV_OPEN ) );
  238. bigdish = surfrev( cross * scale( vector( 1.2, 1.2, 1.2 ) ) );
  239. bigdish = bigdish * trans( vector( 0.0, -0.2, 1.0 ) );
  240. color( bigdish, white );
  241. attrib( bigdish, "reflect", 0.2 );
  242. attrib( bigdish, "transp", 0.95 );
  243. attrib( bigdish, "index", 1.4 );
  244. alldishes = list( dishes, wglasses, glasses, napkins, bigdish );
  245.  
  246. #
  247. # Create some candles staff.
  248. #
  249. cross = cbspline( 3,
  250.           list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
  251.             ctlpt( E3, 0.03,   0.0, 0.0 ),
  252.             ctlpt( E3, 0.035,   0.0, -0.001 ),
  253.             ctlpt( E3, 0.02,   0.0, 0.011 ),
  254.             ctlpt( E3, 0.015,  0.0, 0.011 ),
  255.             ctlpt( E3, 0.014,  0.0, 0.012 ),
  256.             ctlpt( E3, 0.014,  0.0, 0.02 ),
  257.             ctlpt( E3, 0.02,   0.0, 0.03 ) ),
  258.           list( KV_OPEN ) ) +
  259.     ctlpt( E3, 0.012,  0.0, 0.03 ) +
  260.     ctlpt( E3, 0.012,  0.0, 0.015 ) +
  261.     ctlpt( E3, 0.0001, 0.0, 0.015 );
  262.  
  263. cndlbase = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
  264. color( cndlbase, white );
  265. attrib( cndlbase, "reflect", 0.2 );
  266. attrib( cndlbase, "transp", 0.95 );
  267. cndlbase1 = cndlbase * trans( vector( 0.2, 0.3, 1.0 ) );
  268. cndlbase2 = cndlbase * trans( vector( -0.2, 0.3, 1.0 ) );
  269.  
  270. cross = ctlpt( E3, 0.0001, 0.0, 0.015 ) +
  271.     cbspline( 3,
  272.           list(    ctlpt( E3, 0.011,  0.0, 0.015 ),
  273.             ctlpt( E3, 0.011,  0.0, 0.2 ),
  274.             ctlpt( E3, 0.003,  0.0, 0.3 ) ),
  275.           list( KV_OPEN ) );
  276. candle = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
  277. color( candle, red );
  278. candle1 = candle * trans( vector( 0.2, 0.3, 1.0 ) );
  279. candle2 = candle * trans( vector( -0.2, 0.3, 1.0 ) );
  280.  
  281. candles = list( cndlbase1, cndlbase2, candle1, candle2 );
  282.  
  283. #
  284. # View it all and dump it.
  285. #
  286. #
  287. # Go to single buffer since this one is slow.
  288. #
  289. viewstate("DblBuffer");
  290.  
  291. save_mat = view_mat;
  292. view_mat = view_mat * scale( vector( 0.5, 0.5, 0.5 ) );
  293. dinner = list( floor, table, chairs, alldishes, candles );
  294.  
  295. interact( dinner );
  296. save( "dinner", dinner );
  297.  
  298. view_mat = save_mat;
  299. view( list( view_mat ), on );
  300.